﻿using System.Security.Cryptography;
using System.Text;

namespace BasicModuleWebApiJWTAuthorization.Helper
{
    public class GenerateKey
    {
        public static string GenerateRandomKey(int length) 
        {
            const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
            var random = new Random();
            var bytes = new byte[length];
            using (var crypto = new RNGCryptoServiceProvider())
            {
                crypto.GetBytes(bytes);
            }

            var result = new StringBuilder(length);
            foreach (var b in bytes)
            {
                var idx = (b % chars.Length);
                result.Append(chars[idx]);
            }

            // 注意：由于RNGCryptoServiceProvider生成的是随机字节，  
            // 因此上面的方法可能不会生成一个完全均匀分布的字符集。  
            // 对于真正的安全需求，你可能需要采用不同的方法（比如逐个字符生成）。  

            // 另一种方法，确保字符分布更均匀（但性能稍低）：  
            // for (int i = 0; i < length; i++)  
            // {  
            //     var rnd = new Random(BitConverter.ToInt32(bytes, i * sizeof(int)));  
            //     result.Append(chars[rnd.Next(chars.Length)]);  
            //     // 注意：这种方法在length大于bytes.Length / sizeof(int)时会导致问题  
            //     // 因为bytes数组会被重复使用来初始化Random实例  
            // }  

            return result.ToString();
        }

        public static void Run() 
        {
            //R2XMnd6TQdYRUmR0cCfL9fk651Fb3kDI
            string key = GenerateRandomKey(32);
        }
    }
}
